# Nao ha utilizacao de acentos nesses trechos de codigos.
# importa a biblioteca pygame
import pygame, sys 
# importa funcoes da biblioteca pygame
from pygame.locals import * 
# inicia todas as funcoes da biblioteca pygame
pygame.init() 
# Tamanho da tela,tamanho do submenu e pixels.
screen = pygame.display.set_mode((955, 685), 0, 32)
# Nome do jogo acima da tela.
pygame.display.set_caption("Velha Doida")

# cria uma telazinha com imagem na janela do pygame.
pygame.display.set_icon(pygame.image.load("velhinha.jpg"))
# cenario do menu
cenariomenu = pygame.image.load("cena.jpg").convert()
# menu som(http://www.dominiopublico.gov.br/download/som/ea000123.mp3)
menu = pygame.mixer.Sound("menu.ogg")
menu.play(-1)
# menu do jogo. jogar vai ser o nome que vai ser printado na tela do menu, com a funcao screen.blit.
jogar=icon=0
# menu do jogo, usando as funcoes event para detectar o uso do teclado, se o usuario apertar 1 ele pra tela seguinte e para a musica do menu.
while jogar==0:
    screen.fill((0,0,0))
    for tela in pygame.event.get():
        if tela.type == QUIT:
            pygame.quit()
            sys.exit()
        if (tela.type == KEYDOWN):
            if (tela.key==K_ESCAPE):
                sys.exit()
            elif (tela.key==K_1) or (tela.key==K_KP1):
                jogar=1
                menu.stop()
# x,y vai ser o tamanho que ele vai ocupar na tela quando usar um screen.blit, como e um plano cartesiano, um serve pra pra linha de x e outro pra linha de y.   
    x, y = 230, 170
    x1,y1= 300, 250
    x3,y3= 0,0   
    font = pygame.font.Font(None, 105)
    text = font.render("Pressione 1", 1,(250, 250, 250))
    text1 = font.render("Jogar   ", 1,(197, 123, 145))
    screen.blit(cenariomenu,(x3,y3))
    screen.blit(text, (x,y))
    screen.blit(text1,(x1,y1))
    
    
    pygame.display.update()


# Na linha 52 a 54 sera onde o pygame importara as imagens do jogo, desde o cenario ate, as imagens temas do jogo. # converte para a tela
cenario = pygame.image.load("cenario.png").convert()
x1 = pygame.image.load("x1.png").convert()
circulo = pygame.image.load("circulo.png").convert()
# sombra sera chamado de um submenu.
sombra = pygame.image.load("sombra.png").convert_alpha()
velha = pygame.image.load("velha.png").convert()

# em font e text, serao as fontes e textos, cores e tamanho do texto que sera utilizado.
# o numero com tres sequencias serao as cores em RGB que o pygame utiliza.
# (255,255,255) e igual a cor branca
font = pygame.font.SysFont("Arial.ttf", 62)
font1 = pygame.font.SysFont("Arial.ttf", 62)
text = font.render("", True, (255, 255, 255))


# primeiro som do jogo # importa o comando do som do jogo. # a variavel som executa # som.play(-1) executa sem parar.
# som sem direitos autorais, o som03.ogg(http://www.pacdv.com/sounds/free-music-06.html)

from pygame.mixer import Sound
som = pygame.mixer.Sound("som03.ogg")
som.play(-1)
som.set_volume(0.5)
grito = pygame.mixer.Sound("grito.ogg")
grito.set_volume(1.0)
# som quando o primeiro jogador ou o segundo ganhar, som free(http://www.pacdv.com/sounds/free-music-27.html)
som1 = pygame.mixer.Sound("som02.ogg")


# casa para cada uso de quadrado, como o pygame utiliza-se do canto extremo esquerdo do x, por isso o valor de negativo.

# fonte construindo um jogo MMORPG com python.Roberto Faga Jr, Vivian Genaro Motti, Maria da Graca Pimentel
#Mini-Curso: IX ESCOLA REGIONAL DE COMPUTACAO BAHIA-ALAGOAS-SERGIPE).
# quando for dar um screen.blit nas imagens do tabuleiro
quadrados = [-1,-1, -1, -1, -1, -1, -1, -1, -1]
pessoa = True
valor1 = False
contador = 0
m_x= m_y = -69

# capturar as acoes do mouse, durante o jogo.
# Como a janela do pygame atualiza sempre, usaremos o loop aqui do while.
while 1:
        for ok in pygame.event.get():
                if ok.type == QUIT:
                        sys.exit()
# a funcao mouse.get_pos() vai utilizar e fazer mexer com os 3 tipos dos botoes do mouse.		
                if ok.type == MOUSEBUTTONDOWN:
                        m_x, m_y = pygame.mouse.get_pos()

# O metodo blit faz uma superficie na outra considerando o ponto de coordenada (0,0) a parte superior esquerda da superficie de parametro. # nesse codigo o m_x e m_y sera o parametro para quando o mouse passar por cima da casa e para um possivel click, um jogador joga o outro joga depois.
        screen.blit(cenario, (0, 0))
        if valor1==False:
                if((m_x>=0 and m_x<=121) and (m_y >=0 and m_y<=123)):
                        if quadrados[0] == -1:
                                quadrados[0] = pessoa
                                pessoa= not pessoa
                                contador += 1
                elif((m_x>=132 and m_x<=271) and (m_y >=0 and m_y <=123)):
                        if quadrados[1] == -1:
                                quadrados[1] = pessoa
                                pessoa= not pessoa
                                contador += 1
                elif((m_x>= 282 and m_x<= 400) and (m_y >= 0 and m_y <= 123)):
                        if quadrados[2] == -1:
                                quadrados[2] = pessoa
                                pessoa = not pessoa
                                contador += 1
                elif((m_x>= 0 and m_x<= 121) and (m_y >= 134 and m_y <= 265)):
                        if quadrados[3] == -1:
                                quadrados[3] = pessoa
                                pessoa = not pessoa
                                contador += 1
                elif((m_x>= 132 and m_x<= 271) and (m_y >= 134 and m_y <= 265)):
                        if quadrados[4] == -1:
                                quadrados[4] = pessoa
                                pessoa = not pessoa
                                contador += 1
                elif((m_x>= 282 and m_x<= 400) and (m_y >= 134 and m_y <= 265)):
                        if quadrados[5] == -1:
                                quadrados[5] = pessoa
                                pessoa = not pessoa
                                contador += 1
                elif((m_x>= 0 and m_x<= 121) and (m_y >= 275 and m_y <= 400)):
                        if quadrados[6] == -1:
                                quadrados[6] = pessoa
                                pessoa = not pessoa
                                contador += 1
                elif((m_x>= 132 and m_x<= 271) and (m_y >= 275 and m_y <= 400)):
                        if quadrados[7] == -1:
                                quadrados[7] = pessoa
                                pessoa = not pessoa
                                contador += 1
                elif((m_x>= 282 and m_x<= 400) and (m_y >= 275 and m_y <= 400)):
                        if quadrados[8] == -1:
                                quadrados[8] = pessoa
                                pessoa = not pessoa
                                contador += 1
# vai dar um print na tela com a imagem do xis, a ordem com os numeros mostra a ordem do plano cartesiano que ela sera printada na tela. porque de o a 8 ? porque como o plano cartesiano do pygame e o 0, ira comecar pela casa 0 onde e o extremo da tela.		
                for seq in range(len(quadrados)):
                        if quadrados[seq] == 0:
                                if seq == 0:
                                        screen.blit(circulo, (0, 0))
                                elif seq == 1:
                                        screen.blit(circulo, (132, 0))
                                elif seq == 2:
                                        screen.blit(circulo, (282, 0))
                                elif seq == 3:
                                        screen.blit(circulo, (0, 134))
                                elif seq == 4:
                                        screen.blit(circulo, (132, 134))
                                elif seq == 5:
                                        screen.blit(circulo, (282, 134))
                                elif seq == 6:
                                        screen.blit(circulo, (0, 275))
                                elif seq == 7:
                                        screen.blit(circulo, (132, 275))
                                elif seq == 8:
                                        screen.blit(circulo, (282, 275))
# vai dar um print na tela com a imagem do xis, a ordem com os numeros mostra a ordem do plano cartesiano que ela sera printada na tela.					
                        elif quadrados[seq] == 1:
                                if seq == 0:
                                        screen.blit(x1, (0, 0))
                                elif seq == 1:
                                        screen.blit(x1, (132, 0))
                                elif seq == 2:
                                        screen.blit(x1, (282, 0))
                                elif seq == 3:
                                        screen.blit(x1, (0, 134))
                                elif seq == 4:
                                        screen.blit(x1, (132, 134))
                                elif seq == 5:
                                        screen.blit(x1, (282, 134))
                                elif seq == 6:
                                        screen.blit(x1, (0, 275))
                                elif seq == 7:
                                        screen.blit(x1, (132, 275))
                                elif seq == 8:
                                        screen.blit(x1, (282, 275))
# sequencia das ordens dos quadrados utilizados, aqui baseia-se uma das mais complicados algoritimo, saber quando uma casa tera tres resultados iguais na sequencia das casas para apontar o vencedor.
        
                if (quadrados[0] == 1 and quadrados[1] == 1 and quadrados[2] == 1) or (quadrados[3] == 1 and quadrados[4] == 1 and quadrados[5] == 1) or (quadrados[6] == 1 and quadrados[7] == 1 and quadrados[8] == 1) or (quadrados[0] == 1 and quadrados[3] == 1 and quadrados[6] == 1) or (quadrados[1] == 1 and quadrados[4] == 1 and quadrados[7] == 1) or (quadrados[2] == 1 and quadrados[5] == 1 and quadrados[8] == 1) or (quadrados[0] == 1 and quadrados[4] == 1 and quadrados[8] == 1) or (quadrados[2] == 1 and quadrados[4] == 1 and quadrados[6] == 1):
                        text = font.render("Jogador 1 vence", True, (0, 0, 0))
  # mostrara a pausa do som e o comeco de um novo som, para o jogador que foi o vecendor.                      
                        som.stop()
                        som1.play()
                        valor1 = True
			
# sequencia das ordens dos quadrados utilizados, aqui baseia-se uma das mais complicados algoritimo, saber quando uma casa tera tres resultados iguais na sequencia das casas para apontar o vencedor.			
                elif (quadrados[0] == 0 and quadrados[1] == 0 and quadrados[2] == 0) or (quadrados[3] == 0 and quadrados[4] == 0 and quadrados[5] == 0) or (quadrados[6] == 0 and quadrados[7] == 0 and quadrados[8] == 0) or (quadrados[0] == 0 and quadrados[3] == 0 and quadrados[6] == 0) or (quadrados[1] == 0 and quadrados[4] == 0 and quadrados[7] == 0) or (quadrados[2] == 0 and quadrados[5] == 0 and quadrados[8] == 0) or (quadrados[0] == 0 and quadrados[4] == 0 and quadrados[8] == 0) or (quadrados[2] == 0 and quadrados[4] == 0 and quadrados[6] == 0):
                        text = font.render("Jogador 2 vence", True, (0, 0, 0))
 # mostrara a pausa do som e o comeco de um novo som, para o jogador que foi o vecendor.                      
                        som.stop()
                        som1.play()
                        valor1 = True
 # se o contador mostrar que ninguem marcou uma sequencia, ele vai mostrar o nome empate e chamara a funcao grito, que aqui sera o grito da velha.			
                elif contador >= 9:
                        
                        text = font1.render("Terminou Empate ",True,(0,0,0))
                        som.stop()
                        grito.play() and screen.blit(velha,(0,0))
                        
                        valor1 = True
                        
     # ira printar na tela do jogo, a sombra, que eu falamos dela no comeco, um submenu, pra o jogador ver que apertando uma letra ele faz algo e um print mostrando um texto, de quem ganhou ou terminou empate.                    
        else:
                

                screen.blit(sombra, (0, 0))
                screen.blit(text,(450,80))
                quadrados = [-1, -1, -1, -1, -1, -1, -1, -1, -1]
# apertando enter no teclado no fim do jogo, ele ira voltar o jogo
                key = pygame.key.get_pressed()
                if key[K_RETURN]:
                        m_x= m_y = -69
			som1.stop()
                        grito.stop()
			som.play(-1)
                        valor1 = False
                        contador = 0
# atualiza a tela do pygame
        pygame.display.update()
